import java.util.Stack;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 23735
 * Date: 2023-02-04
 * Time: 21:29
 */
public class Solution {
//     单调栈
//     这里使用的是 从下到上递减的单调栈
    public int[] dailyTemperatures(int[] temperatures) {
        int length=temperatures.length;
        // 栈里面存储的是下标, 对应的值可以根据数组获得并进行比较
        Stack<Integer> stack = new Stack<Integer>();
        int[] ans=new int[length];
        for(int i=0;i<length;i++){
            int temp=temperatures[i];
            // 如果比栈顶下标对应的值大, 就说明栈顶对应的位置找到了下一个更大的
            // 就可以根据下标差值记录结果了
            while(!stack.isEmpty()&&temp>temperatures[stack.peek()]){
                int index=stack.pop();
                ans[index]=i-index;
            }
            // 比栈顶下标小就直接放进去
            stack.push(i);
        }
        // 最后没有找到更大的不用管默认为 0
        return ans;
    }
}